home *** CD-ROM | disk | FTP | other *** search
/ Softdisk G-S 98 / SGDS 98.2mg / SDGS.98 / SDD98 / D / CRYPTO.MAKER (.txt) < prev    next >
Encoding:
Applesoft BASIC Source Code  |  1989-10-13  |  14.0 KB  |  412 lines  |  [FC] Applesoft BASIC Program (0x0801)

  1. 10  REM  1
  2. 20  GOTO 3180
  3. 30  CALL GK:KP =  PEEK(24579): RETURN : REM  2
  4. 40  CALL BO,1,1,40,24: RETURN : REM  3
  5. 50  CALL BO,2,4,38,16: RETURN : REM  4
  6. 60  POKE 32,1: POKE 33,38: POKE 34,0: POKE 35,23: RETURN : REM  5
  7. 70  PRINT DD$;"FRE": RETURN : REM  6
  8. 80  REM  7
  9. 90  GOSUB 40: CALL BO,5,1,30,3
  10. 100  VTAB 2: HTAB ( INT((29 - LEN(ME$(MN%,0)))/2) +1): PRINT ME$(MN%,0): GOSUB 60: RETURN 
  11. 110  CALL BO,2,20,38,5: VTAB 21: HTAB ( INT((37 - LEN(BT$(BT)))/2)): PRINT BT$(BT);
  12. 120  VTAB 22: HTAB ( INT((37 - LEN(RM$(RM)))/2)): PRINT RM$(RM): GOTO 140
  13. 130  VTAB 23: HTAB 2: PRINT "                                    "
  14. 140  IF ES < >0  THEN  VTAB 23: HTAB ( INT((28 - LEN(ES$(ES)))/2)): PRINT "PRESS ";: NORMAL : PRINT "[ESC]";: INVERSE : PRINT SP$;ES$(ES);
  15. 150  GOSUB 60: RETURN 
  16. 160  IF PN% = 1  THEN PL%(1) = 1: RETURN 
  17. 170  CALL RS: CALL RD,PN%: RETURN 
  18. 180  FOR N = 1 TO PN%:PL%(N) = N: NEXT : RETURN : REM  8
  19. 190  CALL BO,6,9,30,7: GOSUB 60: VTAB 11: HTAB 10: PRINT "Creating an alphabet": VTAB 13: HTAB 12: PRINT "Please be patient": REM  9
  20. 200  CALL RS:VT% = 26: CALL AL,VT%: RETURN 
  21. 210  CALL ME,MN%,TS%,CT%,CH%,VT%: RETURN : REM  10
  22. 220  REM  11
  23. 230  GOSUB 30: IF KP = 13  THEN  RETURN 
  24. 240  IF KP = 47  OR KP = 63  THEN HL = 2: RETURN 
  25. 250  IF KP = 27  AND ES < >0  THEN CH% = 27: RETURN 
  26. 251  IF KP = 27  AND ES = 0  THEN CH% = CT%
  27. 260 CH% = CH% +(KP = 10  OR KP = 21) -(KP = 8  OR KP = 11)
  28. 270  IF KP >48  AND KP <58  THEN CH% = KP -(48 -(TS% -1)): IF CH% >CT%  THEN CH% = CT%: GOTO 300
  29. 280  IF CH% >CT%  THEN CH% = TS%
  30. 290  IF CH% <TS%  THEN CH% = CT%
  31. 300  GOSUB 210: GOTO 230
  32. 310  REM  12
  33. 320  IF PN% = 0  THEN  GOTO 400
  34. 330 MN% = 1:BT = 1:RM = 1:ES = 0: GOSUB 90: GOSUB 110: CALL BO,2,5,38,3: GOSUB 60: VTAB 6: HTAB 5: PRINT "There are ";PN%;" puzzles in memory.": IF PN% = 25  THEN  GOTO 360
  35. 340 TS% = 1
  36. 350 CT% = 3:CH% = TS%:VT% = 7: CALL BO,2,8,38,12: GOSUB 60: GOSUB 210: GOSUB 230
  37. 360  IF PN% = 25  THEN TS% = 7:CT% = 8:CH% = TS%:VT% =  -5: CALL BO,2,8,38,12: GOSUB 60: GOSUB 210: GOSUB 230:CH% = CH% -5
  38. 370  IF HL = 2  THEN HP = 2: GOSUB 3510: GOTO 330
  39. 380  ON CH% GOTO 390,400,570
  40. 390 PN% = PN% +1: GOTO 410
  41. 400 PN% = 1
  42. 410 PZ% = PN%:PN% = 25: CALL CL,PZ%,PN%:PN% = PZ%:SV = 1:NP = PN% -1
  43. 420 IN$ = "":TP$ = "":MN% = 1:BT = 5:RM = 2:ES = 2: GOSUB 90: GOSUB 110
  44. 430  POKE 24578,0: GOSUB 50: GOSUB 60 VTAB 6: HTAB 2: PRINT "Enter the puzzle to be encoded": HTAB 2: PRINT "(140 character/5 lines maximum!)": VTAB 9: HTAB 2: PRINT "Puzzle #%";PN%;".";
  45. 440  VTAB 12: HTAB 2: PRINT UL$;:IC% = 0:LN = 1: CALL BO,27,17,11,3: GOSUB 60: VTAB 18: HTAB 27: PRINT "Count:  ";IC%;
  46. 450  CALL KEYPRESS: GOTO 640: GOTO 490: GOTO 700: GOTO 460: GOTO 480: GOTO 500
  47. 460 MG$(PN%,1) = "":PN% = PN% -1: IF NP = PN%  THEN SV = 0
  48. 470  GOSUB 70: RETURN 
  49. 480  GOSUB 3970:PZ% = PN%: CALL CLS,PZ%,PN%: GOTO 420
  50. 490 KP = 8: GOSUB 550: GOTO 450
  51. 500 KP =  PEEK(24579):VT% = LN:CT% = KP: CALL ADD,CT%,IC%,VT%:IC% =  PEEK(24578): IF IC% = 140  THEN  GOTO 700
  52. 510  IF  PEEK(24583) >33  THEN  GOSUB 660: IF SV = 2  THEN SV = 1: GOTO 710
  53. 520  IF KP = 32  THEN IN$ = IN$ +TP$:TP$ = ""
  54. 530  GOTO 450
  55. 540  REM   13
  56. 550 KP =  PEEK(24579):VT% = LN:CT% = KP: CALL EDIT,CT%,IC%,VT%:IC% =  PEEK(24578): IF  PEEK(24585) = 0  THEN  GOTO 570
  57. 560  VTAB (11 +LN): HTAB 2: CALL LI: PRINT UL$:MG$(PN%,LN) = "":LN = LN -1:IN$ = MG$(PN%,LN)
  58. 570  IF  RIGHT$(IN$,1) = SP$  THEN  GOTO 620
  59. 580 N =  LEN(IN$): IF N = 0  THEN  GOTO 620
  60. 590  IF  MID$ (IN$,N,1) = SP$  THEN TP$ =  MID$ (IN$,N +1):IN$ =  LEFT$(IN$,N): GOTO 620
  61. 600 N = N -1: IF N = 0  THEN  GOTO 620
  62. 610  GOTO 590
  63. 620  IF LN = 5  THEN  CALL BOX,27,17,11,3: GOSUB 60: VTAB 18: HTAB 27: PRINT "COUNT:"; SPC( (IC% <100) +(IC% <10));IC%;
  64. 630  RETURN 
  65. 640 HL = 2:HP = 2: GOSUB 3510: GOTO 410
  66. 650  REM   14
  67. 660  IF IN$ = ""  THEN IN$ =  LEFT$(TP$, LEN(TP$) -1):TP$ =  RIGHT$(TP$,1)
  68. 665  IF TP$ = SP$  THEN IN$ = IN$ +TP$:TP$ = ""
  69. 670 MG$(PN%,LN) = IN$: VTAB (11 +LN): HTAB (2 +( LEN(IN$))): CALL LI:LN = LN +1:IN$ = "": IF LN = 6  THEN LN = 5:SV = 2: RETURN 
  70. 680  VTAB (11 +LN): HTAB 2: PRINT TP$;UL$;: RETURN 
  71. 690  REM   15
  72. 700 IN$ = IN$ +TP$:MG$(PN%,LN) = IN$: GOSUB 70
  73. 710  IF MG$(PN%,1) = ""  THEN PZ% = PN%: CALL CLS,PZ%,PN%: GOTO 420
  74. 720 MN% = 9:TS% = 1:CT% = 1:CH% = 0:VT% = 2:BT = 1:RM = 1:ES = 0: GOSUB 90: GOSUB 110: CALL BOX,2,4,38,9: GOSUB 60: GOSUB 210
  75. 730  VTAB 5: HTAB 22: PRINT PN%;":"
  76. 740  FOR LN = 1 TO 5: VTAB (6 +LN): HTAB 2: PRINT MG$(PN%,LN): NEXT 
  77. 750 TS% = 5:CT% = 7:CH% = 5:VT% = 3: CALL BOX,2,13,38,7: GOSUB 60: GOSUB 210: GOSUB 230
  78. 760  IF HL = 2  THEN HP = 16: GOSUB 3510: GOTO 720
  79. 770 CH% = CH% -4: ON CH% GOTO 780,810,820
  80. 780 PN% = PN% +1: IF PN% >25  THEN PN% = 25: GOTO 800
  81. 790  GOTO 420
  82. 800 MN% = 1:TS% = 4:CT% = 6:CH% = 0:VT% = 1:BT = 2:RM = 0:ES = 0: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60: GOSUB 210: GOSUB 30
  83. 810  RETURN 
  84. 820 PZ% = PN%: CALL CLS,PZ%,PN%: GOTO 420
  85. 830  REM  16
  86. 840  IF PN% >0  THEN  GOTO 880
  87. 850 MN% = 4:TS% = 3:CT% = 4:CH% = 5:VT% = 4:BT = 2:RM = 0:ES = 0: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60: GOSUB 210: GOSUB 30
  88. 860  IF KP = 47  OR KP = 63  THEN HL = 2:HP = 19: GOSUB 3510
  89. 870  RETURN 
  90. 880 MN% = 4:TS% = 1:CT% = 2:CH% = 1:VT% = 5:BT = 1:RM = 1:ES = 1: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60: GOSUB 210: GOSUB 230: IF CH% = 27  THEN  RETURN 
  91. 890  IF HL = 2  THEN HP = 18: GOSUB 3510: GOTO 880
  92. 900  ON CH% GOSUB 180,160
  93. 910 PG = 1
  94. 920 MN% = 4: GOSUB 90: GOSUB 190
  95. 930  GOSUB 40: GOSUB 90: GOSUB 110
  96. 940 PZ% = PL%(PG): CALL BO,2,4,38,13: CALL BO,2,17,38,3: GOSUB 60: CALL SE,PZ%:BT = 3:RM = 1:ES = 4: GOSUB 110
  97. 950  VTAB 18: HTAB 6: CALL LI: PRINT "Replace the letter ";:RL$ = UL$: HTAB 25: PRINT RL$;
  98. 960 HT = 25: GOSUB 1140: IF KP = 27  THEN  GOSUB 70: RETURN 
  99. 970  IF HL = 1  THEN  GOTO 1000
  100. 980  VTAB 18: HTAB HT:RL$ = TP$: PRINT RL$;
  101. 990  VTAB 18: HTAB 27: PRINT "with ";:WL$ = UL$: HTAB 32: PRINT WL$;:HT = 32: GOSUB 1140: IF KP = 27  THEN  GOTO 950
  102. 1000  IF HL = 1  THEN HL = 0: GOTO 1100
  103. 1010  VTAB 18: HTAB HT:WL$ = TP$: PRINT WL$;
  104. 1020  CALL PL,PZ%: IF  PEEK(24576) = 0  THEN  GOTO 1040
  105. 1030  GOTO 950
  106. 1040  GOSUB 70: VTAB 18: HTAB 2: CALL LI: HTAB 16: PRINT "Correct!": FOR N = 212 TO 96  STEP  -11:P = N:D = 20: GOSUB 3940: NEXT :P = 96:D = 200: GOSUB 3940
  107. 1050 BT = 2:RM = 0:ES = 1: GOSUB 110: GOSUB 30: IF KP = 27  THEN  RETURN 
  108. 1060  IF KP = 47  OR KP = 63  THEN HL = 2:HP = 15: GOSUB 3510
  109. 1070 PG = PG +1: IF PG < = PN%  THEN  GOTO 920
  110. 1080 MN% = 4:TS% = 5:CT% = 5:CH% = 0:VT% = 0:BT = 2:RM = 0:ES = 0: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60: GOSUB 210: GOSUB 30: RETURN 
  111. 1090  REM  17
  112. 1100  VTAB 18: HTAB 6: CALL LI: PRINT "Decode which letter? ";UL$;:ES = 2: GOSUB 130:HT = 27: GOSUB 1140
  113. 1110  VTAB 18: HTAB HT: PRINT TP$:RL$ = TP$: FOR N = 1 TO 26: IF  CHR$(CC%(N)) = RL$  THEN WL$ =  CHR$(N +64)
  114. 1120  NEXT :ES = 4: GOSUB 130: GOTO 1020
  115. 1130  REM  18
  116. 1140 TP$ = ""
  117. 1150  GOSUB 30: IF KP = 27  THEN  RETURN 
  118. 1160  IF KP = 13  AND TP$ < >""  THEN  RETURN 
  119. 1170  IF KP = 47  OR KP = 63  THEN HL = 1: RETURN 
  120. 1180  IF KP >96  AND KP <123  THEN KP = KP -32
  121. 1190  IF (KP >64  AND KP <91)  OR KP = 45  THEN  HTAB HT: VTAB 18: NORMAL : PRINT  CHR$(KP): INVERSE :TP$ =  CHR$(KP): GOTO 1150
  122. 1200  GOSUB 3970;: GOTO 1150
  123. 1210  REM  19
  124. 1220  IF PN% = 0  THEN MN% = 2:BT = 2:RM = 0:ES = 0: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60: VTAB 12: HTAB 3: PRINT "There are no puzzles to be saved.": GOSUB 30:
  125. 1230  IF KP = 47  OR KP = 63  THEN HL = 2:HP = 23: GOSUB 3510
  126. 1240  IF PN% = 0  THEN  RETURN 
  127. 1250 MN% = 2:BT = 8:RM = 5:ES = 1: GOSUB 90: GOSUB 110
  128. 1260  CALL BO,2,5,38,3: GOSUB 60: VTAB 6: HTAB 7: PRINT "You have entered ";PN%;" puzzles.": CALL BO,2,8,38,12: GOSUB 60: GOSUB 2130: IF KP = 27  THEN  RETURN 
  129. 1270  IF KP = 128  THEN  GOTO 1260
  130. 1280  IF HP = 27  THEN HP = 0: GOTO 1250
  131. 1290  GOSUB 1610: IF J = 0  THEN MN% = 2:TS% = 1:CT% = 1:CH% = 0:VT% = 8:BT = 2:RM = 0:ES = 0: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60: GOSUB 210: GOSUB 30: GOTO 1410
  132. 1300 MN% = 2:TS% = 2:CT% = 2:CH% = 0:VT% =  -1:BT = 1:RM = 1:ES = 2: GOSUB 90: GOSUB 110: CALL BO,2,3,38,14: GOSUB 60: GOSUB 210
  133. 1310 TS% = 1:CT% = J:VT% = 4: GOSUB 1730: CALL BO,2,16,38,5: GOSUB 60:TS% = 3:CT% = 4:CH% = 3:VT% = 10: GOSUB 210: GOSUB 230: IF CH% = 27  THEN  GOTO 1220
  134. 1320  IF HL = 2  THEN HP = 5: GOSUB 3510: GOTO 1300
  135. 1330 CH% = CH% -2: ON CH% GOTO 1340,1410
  136. 1340  GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60:TS% = 5:CT% = 5:CH% = 0:VT% =  -6: GOSUB 210:TS% = 1:CT% = J:CH% = 1:VT% = 5: GOSUB 1730: IF CH% = 0  THEN  GOTO 1300
  137. 1350 FL$ = CR$(CH%)
  138. 1360  VTAB 4: HTAB 2:BT = 1:MN% = 2:RM = 1:ES = 2: GOSUB 90: GOSUB 110: CALL BO,2,4,38,10: CALL BO,2,14,38,6: GOSUB 60
  139. 1370  VTAB 6: HTAB 2: PRINT "Replace the file '";FL$;"'": VTAB 8: HTAB 2: PRINT "with these puzzles?"
  140. 1380 TS% = 7:CT% = 8:CH% = 8:VT% = 0: GOSUB 210: GOSUB 230: IF CH% = 27  THEN  GOTO 1300
  141. 1390  IF HL = 2  THEN HP = 20: GOSUB 3510: GOTO 1360
  142. 1400 CH% = CH% -6: ON CH% GOTO 1510,1300
  143. 1410  IF J = 20  THEN MN% = 2:TS% = 9:CT% = 10:CH% = 0:VT% =  -6:BT = 2:RM = 0:ES = 0: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60: GOSUB 210: GOSUB 30
  144. 1420  IF KP = 47  OR KP = 63  THEN HL = 2:HP = 21: GOSUB 3510: GOTO 1290
  145. 1430  IF J = 20  THEN  GOTO 1290
  146. 1440 MN% = 2:BT = 7:RM = 2:ES = 2: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60
  147. 1450 FL$ = "":TP$ = ""
  148. 1460  CALL BO,6,6,30,12: GOSUB 60: VTAB 11: HTAB 10: PRINT "Enter a file name": HTAB 10: PRINT "(12 letters max.):"
  149. 1470  VTAB 14: HTAB 10: PRINT UL$: GOSUB 1830
  150. 1480  IF KP = 27  AND FL$ < >""  THEN  GOTO 1410
  151. 1490  IF KP = 27  THEN  GOTO 1220
  152. 1500  IF HL = 2  THEN HP = 22: GOSUB 3510: GOTO 1410
  153. 1510 MN% = 2:BT = 0:RM = 0:ES = 0: GOSUB 90: GOSUB 110: GOSUB 50
  154. 1520  CALL BO,4,10,34,3: GOSUB 60: VTAB 11: HTAB ( INT((23 - LEN(FL$))/2)): PRINT "Saving '";FL$;"' to disk"
  155. 1530  PRINT DD$;"OPEN CR.";FL$
  156. 1540  PRINT DD$;"WRITE CR.";FL$
  157. 1550  PRINT PN%
  158. 1560  FOR M = 1 TO PN%: FOR N = 1 TO 5: PRINT QM$;MG$(M,N);QM$: NEXT : NEXT 
  159. 1570  PRINT DD$;"CLOSE CR.";FL$
  160. 1580  GOSUB 70:SV = 0
  161. 1590  RETURN 
  162. 1600  REM  20
  163. 1610 BT = 0:RM = 4:ES = 0: GOSUB 110:J = 1:TP$ = ""
  164. 1620  PRINT DD$;"OPEN ";PF$;",TDIR"
  165. 1630  PRINT DD$;"READ ";PF$
  166. 1640  INPUT TP$: INPUT TP$: INPUT TP$
  167. 1650  INPUT TP$: IF TP$ = ""  THEN  GOTO 1710
  168. 1660  IF  MID$ (TP$,2,3) < >"CR."  THEN  GOTO 1650
  169. 1670 N = 5
  170. 1680  IF  MID$ (TP$,N,1) < >SP$  THEN CR$(J) =  MID$ (TP$,5,N -4):N = N +1: GOTO 1680
  171. 1690 J = J +1: IF J = 21  THEN  GOTO 1710
  172. 1700  GOTO 1650
  173. 1710 J = J -1: PRINT DD$;"CLOSE ";PF$: GOSUB 70: RETURN 
  174. 1720  REM  21
  175. 1730  CALL DI,TS%,CT%,CH%,VT%
  176. 1740  IF CH% = 0  THEN  RETURN 
  177. 1750  GOSUB 30: IF KP = 13  THEN  RETURN 
  178. 1760  IF KP = 27  THEN CH% = 0: RETURN 
  179. 1770  IF KP = 47  OR KP = 63  THEN HL = 2: RETURN 
  180. 1780 CH% = CH% +(KP = 10  OR KP = 21) -(KP = 8  OR KP = 11)
  181. 1790  IF CH% >J  THEN CH% = 1
  182. 1800  IF CH% <1  THEN CH% = J
  183. 1810  GOTO 1730
  184. 1820  REM  22
  185. 1830  GOSUB 30: IF KP = 27  THEN  RETURN 
  186. 1840  IF KP = 47  OR KP = 63  THEN HL = 2: RETURN 
  187. 1850  IF KP = 13  AND FL$ < >""  THEN  RETURN 
  188. 1860  IF KP >96  AND KP <123  THEN KP = KP -32
  189. 1870  IF (KP >47  AND KP <58)  OR (KP >64  AND KP <91)  OR KP = 46  THEN TP$ =  CHR$(KP):FL$ = FL$ +TP$: VTAB 14: HTAB (9 +( LEN(FL$))): PRINT TP$;UL$:
  190. 1880  IF  LEN(FL$) = 12  THEN KP = 13: RETURN 
  191. 1890  GOTO 1830
  192. 1900  REM  23
  193. 1910  IF PN% = 0  THEN  GOTO 1960
  194. 1920 MN% = 3:TS% = 1:CT% = 4:CH% = 6:VT% = 3:BT = 1:RM = 1:ES = 0:: GOSUB 90: GOSUB 110: CALL BO,2,4,38,6: CALL BO,2,10,38,10: GOSUB 210:TS% = 5:CT% = 6: GOSUB 210: GOSUB 230
  195. 1930  IF HL = 2  THEN HP = 24: GOSUB 3510: GOTO 1910
  196. 1940 CH% = CH% -4: ON CH% GOTO 1960,1950
  197. 1950  RETURN 
  198. 1960 PZ% = 1: CALL CL,PZ%,PN%:PN% = 0:MN% = 3:BT = 8:RM = 5:ES = 1: GOSUB 90: GOSUB 110
  199. 1970  GOSUB 50: GOSUB 60: VTAB 8: HTAB 8: PRINT "Load puzzles from disk:": GOSUB 2130: IF KP = 27  THEN  RETURN 
  200. 1980  IF KP = 128  THEN  GOTO 1970
  201. 1990  IF HP = 27  THEN HP = 0: GOTO 1960
  202. 2000  GOSUB 1610: IF J = 0  THEN MN% = 2: GOSUB 90: GOSUB 50: GOSUB 60: VTAB 12: HTAB 3: PRINT "There are no puzzles on this disk":BT = 2:RM = 0:ES = 0: GOSUB 110: GOSUB 30: RETURN 
  203. 2010  GOSUB 90:MN% = 4:BT = 1:RM = 1:ES = 2: GOSUB 110: GOSUB 50: GOSUB 60: VTAB 5: HTAB 14: PRINT "Select a file":TS% = 1:CT% = J:CH% = 1:VT% = 6: GOSUB 1730: IF KP = 27  THEN  GOTO 1960
  204. 2020  IF HL = 2  THEN HP = 4: GOSUB 3510: GOTO 2010
  205. 2030 FL$ = CR$(CH%):BT = 0:RM = 0: GOSUB 90: GOSUB 110: CALL BO,3,10,36,3: GOSUB 60: VTAB 11: HTAB ( INT((20 - LEN(FL$))/2)): PRINT "Loading '";FL$;"' from disk"
  206. 2040  GOSUB 70
  207. 2050  PRINT DD$;"OPEN CR.";FL$
  208. 2060  PRINT DD$"READ CR.";FL$
  209. 2070  INPUT PN%
  210. 2080  FOR M = 1 TO PN%: FOR N = 1 TO 5: INPUT MG$(M,N): NEXT : NEXT 
  211. 2090  PRINT DD$;"CLOSE CR.";FL$
  212. 2100  FOR N = 1 TO 20:CR$(N) = "": GOSUB 70
  213. 2110  RETURN 
  214. 2120  REM  23A
  215. 2130  FOR N = 7 TO 9: VTAB (N *2 -4): HTAB 5: PRINT ME$(3,N): NEXT : VTAB 15: HTAB ( INT((36 -( LEN(PF$)))/2)): PRINT "(";PF$")"
  216. 2140  GOSUB 30: IF KP = 27  THEN  RETURN 
  217. 2150  IF KP = 47  OR KP = 63  THEN HL = 2:HP = 26: GOSUB 3510: RETURN 
  218. 2160  IF KP = 83  OR KP = 115  THEN  GOTO 2200
  219. 2170  IF KP = 69  OR KP = 101  THEN  GOTO 2240
  220. 2180  IF KP = 13  OR KP = 67  OR KP = 99  THEN  PRINT DD$;"PREFIX ";PF$: RETURN 
  221. 2190  GOSUB 3930: GOTO 2140
  222. 2200  GOSUB 50: GOSUB 60: VTAB 9: HTAB 13: PRINT "Use disk in": GOSUB 2450: IF KP = 27  THEN KP = 128: RETURN 
  223. 2210  IF HP = 28  THEN HP = 0: GOTO 2200
  224. 2220  PRINT DD$;"PREFIX,S";SL;",D";DR
  225. 2230  PRINT DD$;"PREFIX": INPUT PF$:P1$ = PF$: RETURN 
  226. 2240  GOSUB 50: GOSUB 60: VTAB 6: HTAB 6: PRINT "Edit pathname as desired:"
  227. 2250 BT = 5:RM = 2:ES = 2: GOSUB 110: POKE 33, PEEK(33) -2: POKE 32, PEEK(32) +1
  228. 2260 P1$ = PF$:IN$ = PF$: VTAB 8: HTAB 2: PRINT IN$;
  229. 2270  PRINT " " CHR$(8);
  230. 2280  IF  PEEK(49152) <128  THEN  PRINT "_" CHR$(8);: GOTO 2270
  231. 2290  GET T$:KP =  ASC(T$)
  232. 2300  IF KP = 24  THEN  IF  LEN(IN$)  THEN  HTAB 2: PRINT  SPC(  LEN(IN$) +1):IN$ = "": GOTO 2240
  233. 2310  IF KP = 127  THEN KP = 8
  234. 2320  IF KP = 27  THEN KP = 128:PF$ = P1$: RETURN 
  235. 2330  IF KP = 8  THEN  IF  LEN(IN$) = 1  THEN IN$ = "": HTAB (2): PRINT " " CHR$(8) CHR$(8);: GOTO 2270
  236. 2340  IF KP = 8  THEN  IF  LEN(IN$)  THEN IN$ =  LEFT$(IN$, LEN(IN$) -1): PRINT " " CHR$(8) CHR$(8);: GOTO 2270
  237. 2350  IF KP = 13  THEN  PRINT : GOTO 2410
  238. 2360  IF KP >96  AND KP <123  THEN KP = KP -32
  239. 2370  IF KP = 63  THEN HL = 2:HP = 29: GOSUB 3510: GOTO 2240
  240. 2380  IF (KP >64  AND KP <91)  OR (KP = 46)  OR (KP = 47)  OR (KP >47  AND KP <58)  THEN  GOTO 2430
  241. 2390  GOSUB 3930
  242. 2400  GOTO 2270
  243. 2410  IF IN$ < >""  THEN PF$ = IN$: PRINT DD$;"PREFIX";PF$: GOSUB 70: RETURN 
  244. 2420  GOTO 2390
  245. 2430 T$ =  CHR$(KP): IF  LEN(IN$) <64  THEN IN$ = IN$ +T$: PRINT T$;
  246. 2431  GOTO 2400
  247. 2440  REM  24
  248. 2450  VTAB 12: HTAB 17: PRINT "Slot: ";: NORMAL : PRINT SL;: INVERSE 
  249. 2460  GOSUB 30: IF KP = 13  THEN  VTAB 12: HTAB 23: PRINT SL;: GOTO 2510
  250. 2470  IF KP = 47  OR KP = 63  THEN HL = 2:HP = 28: GOSUB 3510: RETURN 
  251. 2480  IF KP = 27  THEN  RETURN 
  252. 2490  IF KP >48  AND KP <56  THEN SL = KP -48
  253. 2500  GOTO 2450
  254. 2510  VTAB 14: HTAB 17: PRINT "Drive: ";: NORMAL : PRINT DR;: INVERSE : GOSUB 30: IF KP = 13  THEN  VTAB 14: HTAB 24: PRINT DR;: RETURN 
  255. 2520  IF KP = 27  THEN  VTAB 14: HTAB 2: CALL LI: GOTO 2450
  256. 2530  IF KP >48  AND KP <51  THEN DR = KP -48
  257. 2540  GOTO 2510
  258. 2550  REM  25
  259. 2560 HL = 3:HP = 10: GOSUB 3510: RETURN 
  260. 2570  REM  26
  261. 2580 KP = 0: IF PN% = 0  OR SV = 0  THEN  GOTO 2640
  262. 2590 MN% = 7:TS% = 1:CT% = 3:CH% = 0:VT% = 4:BT = 1:RM = 1:ES = 1: GOSUB 90: GOSUB 110: CALL BO,2,4,38,10: GOSUB 60: GOSUB 210
  263. 2600 TS% = 4:CT% = 5:CH% = 4:VT% = 6: CALL BO,2,14,38,6: GOSUB 60: GOSUB 210: GOSUB 230: IF KP = 27  THEN  RETURN 
  264. 2610  IF HL = 2  THEN HP = 9: GOSUB 3510: GOTO 2580
  265. 2620 CH% = CH% -3: ON CH% GOSUB 1220,2640
  266. 2630  IF KP = 27  THEN  GOTO 2580
  267. 2640  GOSUB 40:QU = 1: RETURN 
  268. 2650  REM  27
  269. 2660  IF PN% = 0  THEN MN% = 5:TS% = 4:CT% = 4:CH% = 0:VT% = 2:BT = 2:RM = 0:ES = 0: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60: GOSUB 210: GOSUB 30
  270. 2670  IF KP = 47  OR KP = 63  THEN HL = 2:HP = 19: GOSUB 3510
  271. 2680  IF PN% = 0  THEN  RETURN 
  272. 2690 MN% = 5:TS% = 1:CT% = 3:CH% = 1:VT% = 5:BT = 1:RM = 1:ES = 1: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60: GOSUB 210: GOSUB 230: IF KP = 27  THEN  RETURN 
  273. 2700  IF HL = 2  THEN HP = 7: GOSUB 3510: GOTO 2660
  274. 2710  ON CH% GOTO 2720,2730,2950
  275. 2720  GOSUB 180: GOTO 2740
  276. 2730  GOSUB 160
  277. 2740 MN% = 5:TS% = 5:CT% = 5:CH% = 0:VT% = 0:BT = 2:RM = 0:ES = 2: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60: GOSUB 210: GOSUB 30
  278. 2750  IF KP = 27  THEN  GOTO 2660
  279. 2760  IF KP = 47  OR KP = 63  THEN HL = 2:HP = 25: GOSUB 3510: GOTO 2740
  280. 2770  PRINT DD$"PR#0": TEXT : HOME 
  281. 2780  IF FL$ < >""  THEN  VTAB 1: HTAB ( INT((35 - LEN(FL$))/2)): NORMAL : PRINT "PRINTING ";FL$: GOTO 2800
  282. 2790  VTAB 1: HTAB 2: NORMAL : PRINT "PRINTING..."
  283. 2800  VTAB 4: HTAB 12: PRINT "PRESS 'ESC' TO STOP": INVERSE 
  284. 2810  POKE 34,1: POKE 33,1: HOME : PRINT DD$;"PR#";PS: PRINT PI$: PRINT : PRINT 
  285. 2820  IF FL$ = ""  THEN  HTAB 29: PRINT "C R Y P T O G R A M S";: GOTO 2840
  286. 2830  HTAB (40 - LEN(FL$)): FOR N = 1 TO  LEN(FL$): PRINT  MID$ (FL$,N,1);SP$;: NEXT 
  287. 2840  PRINT : PRINT : PRINT : PRINT :LC = 7
  288. 2850  POKE  -16368,0: FOR M = 1 TO PN%:PZ% = PL%(M): POKE 24586,1: IF  PEEK( -16384) = 155  THEN  POKE  -16368,0:PZ% = M -1:M = PN%: GOTO 2940
  289. 2860  REM  28
  290. 2870 D = ( PEEK(78) + LEN(MG$(PZ%,1)) + LEN(MG$(PZ%,2)) + LEN(MG$(PZ%,3)) + LEN(MG$(PZ%,4)) + LEN(MG$(PZ%,5))): IF D >128  THEN D = D -128
  291. 2880  POKE 78,D
  292. 2890  GOSUB 200: PRINT M;".  ";
  293. 2900  FOR LN = 1 TO 5:VT% = LN: CALL SP,PZ%,VT%: IF  PEEK(24586) = 0  THEN LN = 5: GOTO 2920
  294. 2910  PRINT TP$: PRINT : PRINT :LC = LC +3
  295. 2920  NEXT : IF LC >50  THEN  PRINT FF$:LC = 2
  296. 2930  PRINT : PRINT :LC = LC +2:PZ% = M
  297. 2940  NEXT : PRINT FF$: PRINT : PRINT : GOTO 2960
  298. 2950  GOSUB 180: PRINT DD$;"PR#0": TEXT : HOME : VTAB 1: HTAB 2: NORMAL : PRINT "PRINTING...": INVERSE : POKE 34,1: POKE 33,1: HOME : PRINT DD$;"PR#";PS: PRINT PI$: PRINT : PRINT :PZ% = PN%
  299. 2960  HTAB 36: PRINT "Answers": PRINT : PRINT :LC = 5
  300. 2970  FOR M = 1 TO PZ%: PRINT M;".  ";: FOR LN = 1 TO 5  STEP 2: IF MG$(PL%(M),LN) = ""  THEN LN = 5: GOTO 2990
  301. 2980  PRINT MG$(PL%(M),LN);: IF LN <5  THEN  PRINT MG$(PL%(M),LN +1)
  302. 2990 LC = LC +1: NEXT : IF LC >60  THEN  PRINT FF$:LC = 0
  303. 3000  PRINT : PRINT :LC = LC +2: NEXT : PRINT FF$:: GOSUB 70
  304. 3010  PRINT DD$;"PR#0": TEXT : HOME : CALL HI: POKE 48688, PEEK(0): POKE 48689, PEEK(1): RETURN 
  305. 3020  REM  29
  306. 3030  GOSUB 40
  307. 3040  CALL BO,4,11,34,3: HTAB 8: PRINT "One moment, please": GOSUB 200:MN% = 0: GOSUB 90
  308. 3050  GOSUB 50: GOSUB 60
  309. 3060  FOR M = 0 TO 4: VTAB (8 +2 *M): HTAB ( INT((40 - LEN(ME$(8,M)))/2))
  310. 3070  FOR N = 1 TO  LEN(ME$(8,M))
  311. 3080  IF  ASC( MID$ (ME$(8,M),N,1)) <64  THEN  PRINT  MID$ (ME$(8,M),N,1);: GOTO 3100
  312. 3090  PRINT  CHR$(CC%( ASC( MID$ (ME$(8,M),N,1)) -64));
  313. 3100  NEXT : NEXT 
  314. 3110  FOR M = 0 TO 4
  315. 3120  VTAB (8 +2 *M)
  316. 3130  FOR N = 1 TO  LEN(ME$(8,M))
  317. 3140  IF  ASC( MID$ (ME$(8,M),N,2)) <64  THEN  GOTO 3160
  318. 3150  HTAB ( INT((40 - LEN(ME$(8,M)))/2) +N -1): PRINT  MID$ (ME$(8,M),N,1);:J =  PEEK(49200):J =  PEEK(49200): FOR J = 1 TO 10: NEXT 
  319. 3160  NEXT : NEXT : GOSUB 60:MN% = 8:BT = 2:RM = 0:ES = 0: GOSUB 110: GOSUB 30:ME$(8,0) = "H E L P": RETURN 
  320. 3170  REM  30
  321. 3180  LOMEM: 28416: ONERR  GOTO 3840
  322. 3190  PRINT  CHR$(21): HOME : VTAB 12: HTAB 12: PRINT "LOADING THE GAME"
  323. 3200 DD$ =  CHR$(4):FF$ =  CHR$(12):SP$ =  CHR$(32):QM$ =  CHR$(34):UL$ =  CHR$(95):IN$ = "":TP$ = "":RL$ = "":WL$ = "":FL$ = "":PF$ = "":TY$ = "":P0$ = "":P1$ = "":T$ = ""
  324. 3210 J = 1:M = 1:N = 1:KP = 0:LN = 1:VT% = 1:MN% = 0:TS% = 1:CT% = 1:CH% = 1:BT = 0:RM = 0:ES = 0:HT = 1:IC% = 0:PN% = 0:HL = 0:HP = 0:PG = 0:LC = 0:EL = 0:ER = 0:QU = 0:PZ% = 0:SV = 0:NP = 0:P = 0:D = 0
  325. 3220 RDM = 24690:ALPHA = 24693:MESSAGE = 24696:KEYPRESS = 24699:ADD = 24702:EDIT = 24705:SETUP = 24708:PLAY = 24711:DISPLAY = 24714:CLS = 24717:SPRIN = 24720:INIT = 24723:BOX = 24726:LI = 24729:RSEED = 24732:HIGHOUT = 24738:GKEY = 24741
  326. 3230 SL = 6: REM  31
  327. 3240 DR = 1: REM  32
  328. 3250 PS = 1: REM  33
  329. 3260 PI$ =  CHR$(9) +"80N": REM  34
  330. 3270  DIM MG$(25,5),ME$(10,10),CL$(5),BT$(8),RM$(5),ES$(6),CR$(20),HM$(10),CC%(26),PL%(25)
  331. 3280  GOSUB 4050
  332. 3290  IF TY$ = "G"  THEN  GOSUB 4000
  333. 3300  PRINT DD$;"PREFIX": INPUT PF$:P0$ = PF$
  334. 3310  PRINT DD$;"VERIFY CM.ML"
  335. 3320  PRINT DD$;"VERIFY CM.DATA"
  336. 3330  PRINT DD$;"VERIFY CM.HELP"
  337. 3340  PRINT DD$;"OPEN CM.DATA"
  338. 3350  PRINT DD$;"READ CM.DATA"
  339. 3360  FOR J = 0 TO 10: FOR N = 0 TO 10: INPUT ME$(J,N): NEXT : NEXT 
  340. 3370  FOR N = 1 TO 8: INPUT BT$(N): NEXT 
  341. 3380  FOR N = 1 TO 5: INPUT RM$(N): NEXT 
  342. 3390  FOR N = 1 TO 6: INPUT ES$(N): NEXT 
  343. 3400  PRINT DD$;"CLOSE"
  344. 3410  PRINT DD$;"BLOAD CM.ML": ONERR  GOTO 3720
  345. 3420  CALL IN,ME$(0,0),CR$(0),CC%(1),PL%(1),MG$(0,0),CL$(0),TP$,IN$,RL$,WL$: POKE 48688, PEEK(0): POKE 48689, PEEK(1): INVERSE : GOSUB 3020
  346. 3430  REM  35
  347. 3440 MN% = 0:TS% = 1:CT% = 7:CH% = 1:VT% = 3:BT = 1:RM = 1:ES = 0: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60: GOSUB 210: GOSUB 230
  348. 3450  IF HL = 2  THEN HP = 1: GOSUB 3510: GOTO 3440
  349. 3460  ON CH% GOSUB 320,1220,1910,840,2660,2560,2580
  350. 3470  IF QU = 1  THEN  IF TY$ = "G"  THEN  GOSUB 4030
  351. 3480  IF QU = 1  THEN  PRINT  CHR$(20): PRINT DD$;"PREFIX ";P0$: PRINT DD$;"PR# 0": NORMAL : TEXT : HOME : PRINT  CHR$(4)"bye"
  352. 3490  GOTO 3440
  353. 3500  REM  36
  354. 3510  ONERR  GOTO 3840
  355. 3515  PRINT DD$;"PREFIX ";P0$
  356. 3520  GOSUB 70
  357. 3530  PRINT DD$;"OPEN CM.HELP"
  358. 3540  PRINT DD$;"READ CM.HELP, R";HP
  359. 3550  FOR N = 1 TO 10: INPUT HM$(N): NEXT 
  360. 3560  PRINT DD$;"CLOSE CM.HELP"
  361. 3570  ONERR  GOTO 3720
  362. 3580  IF HL = 3  THEN MN% = 6: GOSUB 90:HL = 1
  363. 3590  IF HL = 2  THEN MN% = 8: GOSUB 90:HL = 1
  364. 3600  GOSUB 50: GOSUB 60: FOR N = 1 TO 10: HTAB 2: PRINT HM$(N): NEXT 
  365. 3610  ON HP GOTO 3660,3620,3660,3660,3620,3660,3620,3660,3660,3620,3620,3620,3620,3660,3660,3620,3660,3660,3660,3660,3660,3660,3660,3660,3660,3620,3660,3660,3620,3660
  366. 3620  IF HL = 1  THEN BT = 2:RM = 0:ES = 6: GOSUB 110
  367. 3630  GOSUB 30
  368. 3640  IF KP = 27  THEN  GOTO 3680
  369. 3650 HL = 0:HP = HP +1: GOTO 3510
  370. 3660  IF HL = 1  THEN BT = 2:RM = 0:ES = 0: GOSUB 110
  371. 3670  GOSUB 30
  372. 3680  FOR N = 1 TO 10:HM$(N) = "": NEXT 
  373. 3685  PRINT DD$;"PREFIX ";PF$
  374. 3690  GOSUB 70
  375. 3700 HL = 0: RETURN 
  376. 3710  REM  37
  377. 3720 ER =  PEEK(222):EL =  PEEK(218) + PEEK(219) *256: GOSUB 70
  378. 3730  PRINT DD$;"CLOSE":MN% = 10
  379. 3740  IF ER = 255  THEN  RESUME 
  380. 3750  IF ER = 3  THEN TS% = 1:CT% = 2:VT% = 8: GOTO 3830
  381. 3760  IF ER = 4  THEN TS% = 3:CT% = 4:VT% = 4: GOTO 3830
  382. 3770  IF ER = 6  OR ER = 7  THEN TS% = 5:CT% = 5:VT% = 2:PF$ = P1$: GOTO 3830
  383. 3780  IF ER = 8  THEN TS% = 6:CT% = 7:VT% =  -2: GOTO 3830
  384. 3790  IF ER = 9  OR ER = 17  THEN TS% = 8:CT% = 9:VT% =  -4: GOTO 3830
  385. 3800  IF ER = 10  THEN  PRINT DD$;"UNLOCK CR.";FL$: RESUME 
  386. 3810  GOSUB 90: GOSUB 50: GOSUB 60: VTAB 10: HTAB 2: PRINT "ERROR NO.";ER;" HAS OCCURRED IN LINE ";EL
  387. 3820  VTAB 12: HTAB 8: PRINT "PROGRAM CANNOT CONTINUE.": VTAB 14: HTAB 2: PRINT "PRESS A KEY TO RERUN": GOSUB 60: GOTO 3860
  388. 3830 CH% = 0:BT = 2:RM = 0:ES = 0: GOSUB 90: GOSUB 110: GOSUB 50: GOSUB 60: GOSUB 210: GOSUB 30: CALL  -3288: GOTO 3440
  389. 3840  NORMAL : TEXT : HOME : PRINT DD$;"CLOSE": PRINT "INITIALIZATION FAILED.": PRINT : PRINT "PLEASE BE SURE CM.ML, CM.DATA, AND CM.HELP ARE ON THIS DISK": IF TY$ = "G"  THEN  GOSUB 4030
  390. 3850  STOP : PRINT  CHR$(4)"bye"
  391. 3860  IF TY$ = "G"  THEN  GOSUB 4030
  392. 3870  PRINT  CHR$(20): PRINT DD$;"PREFIX ";P0$: PRINT DD$;"PR# 0": NORMAL : TEXT : STOP : PRINT  CHR$(4)"bye"
  393. 3880  PRINT DD$;"CLOSE": PRINT  CHR$(12): VTAB 10: HTAB 4: PRINT "CAN'T FIND CM.HELP ON THIS DISK": PRINT : HTAB 8: PRINT "CHECK DISK AND TRY AGAIN": ONERR  GOTO 3720
  394. 3890 PN% = PN% -1: IF NP = PN%  THEN SV = 0
  395. 3900 BT = 2:RM = 0:ES = 0: GOSUB 110: GOSUB 30: CALL  -3288: GOTO 3440
  396. 3910  GOTO 3830
  397. 3920  REM  38
  398. 3930  REM  39
  399. 3940  CALL  PEEK(121) + PEEK(122) *256 +32,P,D: REM   GET  COS <UNKNOWN TOKEN> ASC HLIN ~<CTRL-0x02>  GET  COS <UNKNOWN TOKEN> ASC HLIN <CTRL-0x02> IF 0 TAB(  GR  = <CTRL-0x05>  OR <CTRL-0x02><UNKNOWN TOKEN><CTRL-0x09> * = <UNKNOWN TOKEN> RESTORE ~<CTRL-0x02><CTRL-0x18> HGR2 <UNKNOWN TOKEN>`
  400. 3950  RETURN 
  401. 3960  REM  40
  402. 3970  CALL  PEEK(121) + PEEK(122) *256 +28: REM  SPEED=   DEL <UNKNOWN TOKEN> SPEED= <CTRL-0x01> DEL <UNKNOWN TOKEN> SPEED= <CTRL-0x02><CTRL-0x18> HGR2 <CTRL-0x14> PLOT 0 TAB(  SPEED= <CTRL-0x02> DEL <UNKNOWN TOKEN> SPEED= $<CTRL-0x18> HGR2 <CTRL-0x08> PLOT 0 TAB(   NOT <UNKNOWN TOKEN> =  STR$`8H RIGHT$<CTRL-0x01> = <UNKNOWN TOKEN>h RIGHT$<CTRL-0x01> = <UNKNOWN TOKEN> ONERR <UNKNOWN TOKEN> -<CTRL-0x01><UNKNOWN TOKEN> RND =  VAL:`
  403. 3980  RETURN 
  404. 3990  REM  41
  405. 4000  CALL  PEEK(121) + PEEK(122) *256 +28: REM 8 <CTRL-0x1f><UNKNOWN TOKEN> GOSUB <CTRL-0x02> HGR2 <CTRL-0x01>` IF ^ TAB(  IF ) TAB( <CTRL-0x09>  PLOT ) TAB( `
  406. 4010  RETURN 
  407. 4020  REM  42
  408. 4030  CALL  PEEK(121) + PEEK(122) *256 +28: REM 8 <CTRL-0x1f><UNKNOWN TOKEN> GOSUB <CTRL-0x02> HGR2 <CTRL-0x01>` IF _ TAB(  IF ) TAB( ) SIN PLOT ) TAB( `
  409. 4040  RETURN 
  410. 4050  CALL  PEEK(121) + PEEK(122) *256 +28: REM 8 <CTRL-0x1f><UNKNOWN TOKEN> GOSUB <CTRL-0x07> HGR2 ) SPEED= <UNKNOWN TOKEN> DEL <CTRL-0x01>` IF  STOP <UNKNOWN TOKEN> -<CTRL-0x06><UNKNOWN TOKEN><CTRL-0x0e> - MID$ <UNKNOWN TOKEN><CTRL-0x05> SPEED= 2 DEL <CTRL-0x01>` SPEED= + DEL <CTRL-0x01>` IF  TAB( <UNKNOWN TOKEN><UNKNOWN TOKEN><CTRL-0x05> SPEED= E DEL <CTRL-0x01>` SPEED= C DEL <CTRL-0x01>` SPEED= G DEL <CTRL-0x01>`
  411. 4060 TY$ =  CHR$( PEEK(1)): RETURN 
  412. 4070  RETURN